﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        #region 构造函数


        public Form1()
        {
            InitializeComponent();
        }
        #endregion

        #region 事件
        /// <summary>
        /// fx计算按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFx_Click(object sender, EventArgs e)
        {
            //声明变量
            decimal a = 0;
            decimal b = 0;
            decimal c = 0;
            decimal x = 0;
            decimal result = 0;
            //验证输入的字符
            if (!decimal.TryParse(txta.Text, out a))
            {
                MessageBox.Show("请输入数字。", this.Text);
                return;
            }
            if (!decimal.TryParse(txtb.Text, out b))
            {
                MessageBox.Show("请输入数字。", this.Text);
                return;
            }
            if (!decimal.TryParse(txtc.Text, out c))
            {
                MessageBox.Show("请输入数字。", this.Text);
                return;
            }
            if (!decimal.TryParse(txtx.Text, out x))
            {
                MessageBox.Show("请输入数字。", this.Text);
                return;
            }
            result = a * x * x + b * x + c;
            lblFxResult.Text = result.ToString();
        }
        /// <summary>
        /// 百位数输出计算按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnHundreds_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (!int.TryParse(txtHundreds.Text, out num))
            {
                MessageBox.Show("请输入数字。", this.Text);
                txtHundreds.Text = "";
                return;
            }
            if (num > 1000 || num < 100)
            {
                MessageBox.Show("请输入三位数。", this.Text);
                txtHundreds.Text = "";
                lblHundreds.Text = "";
                lblten.Text = "";
                lblbits.Text = "";
                return;
            }
            lblHundreds.Text = txtHundreds.Text.Substring(0, 1);
            lblten.Text = txtHundreds.Text.Substring(1, 1);
            lblbits.Text = txtHundreds.Text.Substring(2, 1);
        }

        /// <summary>
        /// 判断闰年
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnyear_Click(object sender, EventArgs e)
        {
            int year = 0;
            if (!int.TryParse(txtyear.Text, out year))
            {
                MessageBox.Show("请输入年份。", this.Text);
            }
            if (IsLeap(year))
            {
                lblYear.Text = "闰年";
            }
            else
            {
                lblYear.Text = "平年";
            }
        }


        #endregion

        #region 方法
        /// <summary>
        /// 判定公历闰年遵循的一般规律为：四年一闰，百年不闰，四百年再闰。
        /// 公历闰年的精确计算方法：（按一回归年365天5小时48分45.5秒）
        /// 普通年能被4整除而不能被100整除的为闰年。 （如2004年就是闰年，1900年不是闰年）
        /// 世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年，3200年不是闰年)
        /// 对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年，86400年不是闰年）
        /// 
        /// 公元前闰年规则如下：
        /// 非整百年：年数除4余数为1是闰年，即公元前1、5、9……年；
        /// 整百年：年数除400余数为1是闰年，年数除3200余数为1，不是闰年,年数除172800余1又为闰年，即公元前401、801……年。
        /// </summary>
        /// <param name="yN">年份数字</param>
        /// <returns>判断结果</returns>
        public static bool IsLeap(int yN)
        {

            if ((yN % 400 == 0 && yN % 3200 != 0)
               || (yN % 4 == 0 && yN % 100 != 0)
               || (yN % 3200 == 0 && yN % 172800 == 0))
                return true;
            else
                return false;

        }
        #endregion
    }
}
